﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using DataAccessComponents;
using System.Collections.ObjectModel;
using System.Windows;

namespace BusinessLogicLayer
{
    public class PracownikBL
    {
        private DbOperations dal = new DbOperations();

        /// <summary>
        /// Funkcja dodawająca pracownik do bazy danych
        /// </summary>
        /// <param name="pracownik">Obiekt Pracownik</param>
        /// <returns></returns>
        public int dodajPracownik(Pracownik pracownik)
        {
            return dal.dodajPracownik(pracownik);
        }

        /// <summary>
        /// Funkcja usuwająca pracownik z bazy danych
        /// </summary>
        /// <param name="idpracownik">Id pracownik do usunięcia</param>
        public void usunPracownik(int idpracownik)
        {
            dal.usunPracownik(idpracownik);
        }

        /// <summary>
        /// Funkcja akutualizująca pracownik w bazie danych
        /// </summary>
        /// <param name="pracownik">Obiekt pracownik zawierający inforamacje do aktualizacji</param>
        public void aktualizujPracownik(Pracownik pracownik)
        {
            dal.aktualizujPracownik(pracownik);
        }

        /// <summary>
        /// Pobiera pracownik na podstawie id pracownik
        /// </summary>
        /// <param name="idpracownik">Id pracownik</param>
        /// <returns>Obiekt Pracownik</returns>
        public Pracownik pobierzPracownik(int idpracownik)
        {
            return dal.pobierzPracownik(idpracownik);
        }

        public ObservableCollection<Pracownik> pobierzListePracownikow()
        {

            ObservableCollection<Pracownik> pracownicy = dal.pobierzListePracownikow();
            AdresBL adresBL = new AdresBL();
            foreach (Pracownik prac in pracownicy)
            {
                prac.Adres = adresBL.pobierzAdres(prac.Id_adres);
            }

            return pracownicy;
        }

        /// <summary>
        /// Funkcja aktualizuje pozycje pracowników na podstawie listy pracownikow
        /// </summary>
        /// <param name="listaPracownikow"></param>
        /// <returns></returns>
        public bool aktualizujPracownikow(ObservableCollection<Pracownik> listaPracownikow)
        {
            
            AdresBL adresBL = new AdresBL();
            foreach (Pracownik prac in listaPracownikow)
            {
                // aktualizacja danych pracownika
                aktualizujPracownik(prac);
                //aktualizacja adresu pracownika
                adresBL.aktualizujAdres(prac.Adres);
            }
            return true;
        }

        /// <summary>
        /// Funkcja usuwa pozycje pracowników na podstawie listy pracownikow do usunięcia
        /// </summary>
        /// <param name="listaPracownikow"></param>
        /// <returns></returns>
        public bool usunPracownikow(ObservableCollection<Pracownik> listaPracownikow)
        {
            foreach (Pracownik prac in listaPracownikow)
            {
                usunPracownik(prac.Id_pracownik);             
            }
            return true;
        }
    }
}
